package com.coder.genreatetools.util;

import com.coder.genreatetools.util.Constants.JAVA_TYPE;
import com.coder.genreatetools.util.Constants.MYSQL_JDBC_TYPE;

/**
 * 处理名字
 * eg:
 * user_name -> UserName
 */
public class PorcessName {
	public static String getJavaName(String name, boolean startUpper) {
		name = name.toLowerCase();
		int pos = name.indexOf("_");
		name = name.replaceAll("_", "");
		char[] chars = name.toCharArray();
		if (startUpper)
			chars[0] = (char) (chars[0] - 32);
		if (pos != -1)
			chars[pos] = (char) (chars[pos] - 32);
		return String.valueOf(chars);
	}

	public static String replaceUnderlineAndfirstToUpper(String srcStr) {
		String newString = "";
		String org="_";
		int first = 0;
		if(srcStr.indexOf(org)==1)
		{
			srcStr=srcStr.substring(2);
		}
		while (srcStr.indexOf(org) != -1) {
			first = srcStr.indexOf(org);
			if (first != srcStr.length()) {
				newString = newString + srcStr.substring(0, first);
				srcStr = srcStr.substring(first + org.length(), srcStr.length());
				srcStr = firstCharacterToUpper(srcStr);
			}
		}
		newString = newString + srcStr;
		return newString;
	}
	public static String firstCharacterToUpper(String srcStr) {
		return srcStr.substring(0, 1).toUpperCase() + srcStr.substring(1);
	}
	
	public static String getJavaClassName(String srcStr){
		return firstCharacterToUpper(replaceUnderlineAndfirstToUpper(srcStr));
	}
	
	/**
	 * 获取mysql字段类型对应的java类型
	 * @param mysqlJdbcType 数据库字段类型
	 * @param isNullable 是否可空
	 * @return
	 */
    public static String getJavaTypeForMySql(String mysqlJdbcType, boolean isNullable){
        // 转换数据库日期时间相关的类型
        if(MYSQL_JDBC_TYPE.TIMESTAMP.equalsIgnoreCase(mysqlJdbcType)
        		|| MYSQL_JDBC_TYPE.TIME.equalsIgnoreCase(mysqlJdbcType)
        		|| MYSQL_JDBC_TYPE.DATE.equalsIgnoreCase(mysqlJdbcType)
        		|| MYSQL_JDBC_TYPE.DATETIME.equalsIgnoreCase(mysqlJdbcType)
        		){
            return JAVA_TYPE.DATE;
        }
        
		// 转换数据库int相关的类型
		if (MYSQL_JDBC_TYPE.INT.equalsIgnoreCase(mysqlJdbcType)) {
			return JAVA_TYPE.INTEGER;
		}
		
		// 转换数据库smailint相关的类型
		if (MYSQL_JDBC_TYPE.SMALLINT.equalsIgnoreCase(mysqlJdbcType)) {
			return JAVA_TYPE.SHORT_OBJ;
		}

		// 转换数据库整型相关的类型
		if (MYSQL_JDBC_TYPE.INTEGER.equalsIgnoreCase(mysqlJdbcType)
				|| MYSQL_JDBC_TYPE.TINYINT.equalsIgnoreCase(mysqlJdbcType)
				|| MYSQL_JDBC_TYPE.SMALLINT.equalsIgnoreCase(mysqlJdbcType)
				|| MYSQL_JDBC_TYPE.MEDIUMINT.equalsIgnoreCase(mysqlJdbcType)) {
			if(isNullable){
				return JAVA_TYPE.INTEGER;
			}
			return JAVA_TYPE.INTEGER;
		}
		
        //转换数据库double相关的类型
        if(MYSQL_JDBC_TYPE.DOUBLE.equalsIgnoreCase(mysqlJdbcType)
        		|| MYSQL_JDBC_TYPE.NUMERIC.equalsIgnoreCase(mysqlJdbcType)
        		|| MYSQL_JDBC_TYPE.DECIMAL.equalsIgnoreCase(mysqlJdbcType)){
        	if(isNullable){
        		//为空
        		return JAVA_TYPE.DOUBLE_OBJ;
        	}
        	return JAVA_TYPE.DOUBLE;
        }
        
        //转换数据库bit相关的类型
        if(MYSQL_JDBC_TYPE.BIT.equalsIgnoreCase(mysqlJdbcType)){
        	if(isNullable){
        		//为空
        		return JAVA_TYPE.BOOLEAN_OBJ;
        	}
        	return JAVA_TYPE.BOOLEAN;
        }
        
		// 转换数据库bigint相关的类型
		if (MYSQL_JDBC_TYPE.BIGINT.equalsIgnoreCase(mysqlJdbcType)) {
//			if (isNullable) {
//				// 可为空
//				return JAVA_TYPE.LONG_OBJ;
//			}
			return JAVA_TYPE.LONG_OBJ;
			
		}
		
		// 转换数据库float相关的类型
		if (MYSQL_JDBC_TYPE.FLOAT.equalsIgnoreCase(mysqlJdbcType)) {
			if (isNullable) {
				// 可为空
				return JAVA_TYPE.FLOAT;
			}
			return JAVA_TYPE.FLOAT_OBJ;
			
		}
		
		// 转换数据库String相关的类型
		if (MYSQL_JDBC_TYPE.VARCHAR.equalsIgnoreCase(mysqlJdbcType)
				|| MYSQL_JDBC_TYPE.CHAR.equalsIgnoreCase(mysqlJdbcType)
				|| MYSQL_JDBC_TYPE.GEOMETRY.equalsIgnoreCase(mysqlJdbcType)
				|| MYSQL_JDBC_TYPE.VARBINARY.equalsIgnoreCase(mysqlJdbcType)
				|| MYSQL_JDBC_TYPE.BINARY.equalsIgnoreCase(mysqlJdbcType)
				|| MYSQL_JDBC_TYPE.BLOB.equalsIgnoreCase(mysqlJdbcType)
				|| MYSQL_JDBC_TYPE.TINYBLOB.equalsIgnoreCase(mysqlJdbcType)
				|| MYSQL_JDBC_TYPE.MEDIUMBLOB.equalsIgnoreCase(mysqlJdbcType)) {
			return JAVA_TYPE.STRING;
		}
		
        return mysqlJdbcType;
    }
	
}
